package com.xiangge.demo;

import java.util.Scanner;

/*
     3、[难]输入一个正整数，然后把该正整数转化为二进制。
 */
public class ForDemo6 {
    public static void main(String[] args) {
        // 1. 键盘录入正整数：n 并且对n进行校验
        System.out.println("请输入一个正整数：");
        int n = new Scanner(System.in).nextInt();
        if(n <= 0){
            System.err.println("您输入的整数不合法！");
            return;
        }
        // 定义一个用于拼接余数的字符串str
        // String str = "";
        int num = 0;
        // 定义循环的轮数变量 i , 初始值：1
        int i = 1;
        // 2. 使用死循环while(true) 模拟除二取余过程
        while (true) {
            // 3. 获取当前循环轮数的余数： bit
            int bit = n % 2 ;
            // 4. 将每一轮得到的余数从后往前拼接到字符串str中
            num = (int) (bit * Math.pow(10, (i - 1)) + num);
            /*
                第 1 轮: num = 1                               bit = 1
                第 2 轮: num = 11                              bit = 1
                第 3 轮: num = 111                             bit = 1
                第 4 轮: num = 111                             bit = 0
                第 5 轮: num = 10111                           bit = 1
                ...
                    bit : 1   --- num = 110111   bit : 0  --- num = 10111
                第 i 轮: num =   bit * 10 ^ (i - 1)  + num
                第 1 轮:  num = 1 * 10 ^ 0 + 0 =  1
                第 2 轮:  num = 1 * 10 ^ 1 + 1 =  11
                第 3 轮:  num = 1 * 10 ^ 2 + 11 =  111
                第 4 轮:  num = 0 * 10 ^ 3 + 111 =  111
                第 5 轮:  num = 1 * 10 ^ 4 + 111 =  10111
             */
            // 5. 拼接完成之后，修改n的值
            n = n / 2;
            // 6. n修改之后，立刻判断n的值是否到达0
            if( n == 0 ){
                break;
            }
            // 轮数++
            i++;
        }
        // 7. 循环结束之后打印： str即为n的二进制
        System.out.println("二进制的值为：" + num);

    }
}
